#!/bin/sh
cfg=config.ini
port=`awk -F '=' '/\[app\]/{a=1}a==1&&$1~/port/{print $2;exit}' $cfg`
appName=`awk -F '=' '/\[app\]/{a=1}a==1&&$1~/name/{print $2;exit}' $cfg`
version=`awk -F '=' '/\[app\]/{a=1}a==1&&$1~/version/{print $2;exit}' $cfg`
ymlLocation=`awk -F '=' '/\[app\]/{a=1}a==1&&$1~/yml/{print $2;exit}' $cfg`
appJar="${appName}-${version}.jar"
#使用说明，用来提示输入参数
help(){
     echo -e "\n\033[0;31m用法: sh command.sh [help|start|stop|restart(默认值)|state] \n\033[0m"
     exit 1
}
#根据输入参数，选择执行对应jar包，不输入则执行重启命令
operate="$1"
#检查程序是否在运行
is_exist(){
   #获取PID
   pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
   #如果不存在返回1，存在返回0
   if [ -z "${pid}" ]; then
     return 1
   else
     return 0
   fi
}
#启动方法
start(){
   is_exist
   if [ $? -eq "0" ]; then
     echo -e "${appJar} port[${port}] is already running. pid=\033[0;31m${pid}\033[0m ."
   else
     echo "${appJar} port[${port}] starting ..."
     #带JVM参数启动命令
     nohup java -Xms64m -Xmx128m -XX:PermSize=16M -XX:MaxPermSize=128M -jar ${appJar} --server.port=${port} --spring.config.location=${ymlLocation} >/dev/null 2>&1 &
     #不带JVM参数启动命令
     # nohup java -jar ${appJar} --server.port=${port} --spring.config.location=${ymlLocation} >/dev/null 2>&1 &
     #停留10秒，查看实时日志
     sleep 10
     tail -f logs/${appName}.log
   fi
}
#停止方法
stop(){
   is_exist
   if [ $? -eq "0" ]; then
     echo "${appJar} port[${port}] stopping ..."
     kill -9 $pid
     sleep 5
     echo -e "${appJar} port[${port}] stop success. pid=\033[0;31m${pid}\033[0m ."
   else
     echo "${appJar} port[${port}] is not running"
   fi
}
#输出运行状态
state(){
   is_exist
   if [ $? -eq "0" ]; then
     echo -e "${appJar} port[${port}] is running. pid=\033[0;31m${pid}\033[0m ."
   else
     echo "${appJar} port[${port}] is not running."
   fi
}
#重启
restart(){
    #先停止服务，然后等待5秒后，再次重启服务
    stop
    sleep 5
    start
}
#根据输入参数，选择执行对应方法，不输入则执行使用说明
case ${operate} in
   "help")
     help
     ;;
   "start")
     start
     ;;
   "stop")
     stop
     ;;
   "state")
     state
     ;;
   "restart")
     restart
     ;;
   *)
     restart
     ;;
esac